L'architecture monolithique est un modèle de conception logicielle où l'ensemble de l'application est construite comme une seule unité indivisible. Tous les composants, services et fonctionnalités sont intégrés dans un seul déploiement.
Cette approche traditionnelle a été largement utilisée dans les premières applications logicielles et reste pertinente pour certains types de projets.
Caractéristiques Principales
Unité indivisible : L'application est déployée comme un tout unique
Couplage fort : Les composants sont étroitement liés entre eux
Structure en couches : Organisation typique en présentation, métier et données
Déploiement unique : Un seul artefact à déployer
Partage de ressources : Tous les composants utilisent les mêmes ressources système
🏠
APPLICATION PRINCIPALE
Point d'entrée unique de l'application. Contient toute la logique métier, les interfaces utilisateur et l'accès aux données dans une seule unité déployable.
Fonction: Exécution complète de l'application
Exemple de Code Spring Boot
@SpringBootApplication public classMonolithiqueApplication { public static voidmain(String[] args) {
SpringApplication.run(MonolithiqueApplication.class, args);
}
}
🖥️
INTERFACE UTILISATEUR
Couche de présentation qui gère l'interaction avec les utilisateurs. Inclut les vues, contrôleurs et modèles pour l'affichage des données.
Fonction: Présentation et interaction utilisateur
Exemple de Contrôleur REST
@RestController @RequestMapping("/api/users") public classUserController { @Autowired private UserService userService;
@GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.findById(id);
}
@PostMapping public User createUser(@RequestBody User user) { return userService.save(user);
}
}
⚙️
LOGIQUE MÉTIER
Cœur de l'application contenant les règles de validation, les processus métier et les services applicatifs. Traite les demandes de l'interface utilisateur.
Fonction: Traitement des règles métier
Exemple de Service
@Service public classUserService { @Autowired private UserRepository userRepository;
public User findById(Long id) { return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
public User save(User user) { // Validation des règles métier if (user.getEmail() == null || user.getEmail().isEmpty()) { throw new IllegalArgumentException("Email requis");
} return userRepository.save(user);
}
}
💾
ACCÈS AUX DONNÉES
Couche responsable de la communication avec les bases de données et autres systèmes de persistance. Gère les opérations CRUD et les requêtes complexes.
Fonction: Persistance des données
Exemple de Repository JPA
@Repository public interfaceUserRepositoryextends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.email = :email")
Optional<User> findByEmail(@Param("email") String email);
@Query("SELECT u FROM User u WHERE u.createdAt > :date")
List<User> findRecentUsers(@Param("date") LocalDateTime date);
}
🔧
COMPOSANTS COMMUNS
Bibliothèques partagées, utilitaires, services de configuration et modules de sécurité utilisés par l'ensemble de l'application monolithique.